#include "client5.h"
#include "ui_client5.h"

client5::client5(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::client5)
{
    ui->setupUi(this);
    setWindowTitle(tr("小翼家庭监控"));
    //摄像头操作
        QList<QCameraInfo> infos=QCameraInfo::availableCameras();
        foreach (QCameraInfo info, infos)
        {
            ui->comboBox->addItem(info.deviceName());
        }
}

client5::~client5()
{
    delete ui;
}
// 打开摄像头按钮点击事件处理函数
void client5::on_pushButton_3_clicked()
{
    // 创建摄像头对象，使用当前选中的摄像头设备
    ca = new QCamera(ui->comboBox->currentText().toUtf8(), this);
    // 创建图像捕获对象
    cap = new QCameraImageCapture(ca, this);
    // 连接图像捕获信号和槽函数，用于显示捕获到的图像
    QObject::connect(cap, &QCameraImageCapture::imageCaptured, this, [&](int id, const QImage &preview)
    {
        QPixmap map = QPixmap::fromImage(preview);
        map = map.scaled(ui->label_4->size());
        ui->label_4->setPixmap(map);
    });
    // 创建视频窗口对象
    vw = new QVideoWidget(ui->widget);
    // 调整视频窗口大小
    vw->resize((ui->widget->size()));
    // 设置摄像头的视频输出窗口
    ca->setViewfinder(vw);
    // 显示视频窗口
    vw->show();
    // 开始摄像头预览
    ca->start();
    // 禁用打开摄像头按钮，启用关闭摄像头按钮和拍照按钮
    ui->pushButton_3->setEnabled(false);
    ui->pushButton_4->setEnabled(true);
    ui->pushButton->setEnabled(true);
}

// 关闭摄像头按钮点击事件处理函数
void client5::on_pushButton_4_clicked()
{
    // 停止摄像头预览
    ca->stop();
    // 隐藏视频窗口
    vw->hide();
    // 释放摄像头和视频窗口对象内存
    delete ca;
    delete vw;
    // 禁用关闭摄像头按钮，启用打开摄像头按钮和拍照按钮
    ui->pushButton_3->setEnabled(true);
    ui->pushButton_4->setEnabled(false);
    ui->pushButton->setEnabled(false);
}

// 保存按钮点击事件处理函数
void client5::on_pushButton_2_clicked()
{
    // 获取图片保存路径
    QString lj = ui->lineEdit_4->text();
    if (lj.isEmpty()) {
        // 如果文本框为空，则弹出对话框让用户选择保存路径
        lj = QFileDialog::getSaveFileName(this, tr("Save Image"), "", tr("Images (*.png *.xpm *.jpg)"));
        if (lj.isEmpty()) {
            return; // 用户取消操作，直接返回
        }
    }
    // 捕获并保存图片到指定路径
    cap->capture(lj);
}


// 拍照按钮点击事件处理函数
void client5::on_pushButton_clicked()
{
    // 捕获并保存图片（不指定路径）
    cap->capture();
}

// 切换到client3界面按钮点击事件处理函数
void client5::on_commandLinkButton_clicked()
{
    client3 *p = new client3;
    hide();
    p->show();
}
